前言
接下来我们要学习一下 SRP ,真正地从头开始渲染一个物体(虽然没那么底层啦),在这之前我们要先对一些概念进行一下梳理,这节课是对 Unity 中 不同的渲染路径进行梳理。
参考文章
渲染路径概览
在 Unity 里,渲染路径决定了光照是如何应用到 Unity Shader 中的。
——Unity Shader 入门精要
指定了不同的渲染路径,Unity 中的渲染管线才知道如何将光源、光照信息传到 Shader 中供开发者使用。
目前 Unity 的主流渲染路径是 前向渲染路径 和 延迟渲染路径,默认的都是前向渲染路径,LWRP 是支持前向或延迟渲染,我们在第二篇文章 LWRP 的使用中创建的渲染器也是 Forward Renderer。
前向渲染路径
- 原理:先对图元进行深度测试,如果通过则进行光照计算。对于每个逐像素光照,都需要进行一次,如果有N个物体,M个逐像素光源,则需要进行MxN个Pass。相当于是每判断一次进行一次渲染,会有重复渲染的部分。
- 设置:光源可以设置Render Mode,根据Render Mode 和 Quality Setting 中设置的 Pixel Light Count 来判断是否逐像素计算
- 两种Pass:
- Base Pass:
实现:光照纹理、环境光、自发光、阴影(平行光的阴影);
一个逐像素的平行光,所有逐顶点、SH 光源
模板:Tag{“LightMode” = “ForwardBase”}
#pragma multi_compile_fwbase - Additional Pass:
实现:默认情况下不支持阴影,但可以通过使用 #pragma multi_compile_fwdadd_fullshadows 来开启
除了 Base Pass 之外影响该物体的逐像素光源,每个光源执行一次 Pass
模板:Tags{“LightMode” = “ForwardAdd”}
Blend One One
#pragma multi_compile_fwdadd
- Base Pass:
- 在 Unity 使用前向渲染通道可以得到对应的
延迟渲染路径
- 原理:一般是两个 Pass,第一个 Pass 用来对场景中所有的片元进行 G缓冲,即当前片元可见则把其信息存储到 G缓冲区;在第二个 Pass 中,利用 G缓冲区的各个片元信息进行真正的光照计算。相当于是整体判断再统一做渲染。
- 总结: 对于场景中光源多的情况下,但是存在一些缺点。
总结
这次介绍比较笼统浅显,主要是对两种渲染路径的理解,以后会进行扩充,并对一些概念进行深入讲解。